﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using Microsoft.Security.Application;

namespace InhollandAirPortal {
  public partial class KoopReis : System.Web.UI.Page {
    private Reis PaginaReis = new Reis();
    protected void Page_Load(object sender, EventArgs e) {
			// Label en button alleen weergegeven indien er een correcte reis is om te boeken
			lblBeschrijving.Visible = false;
			btnBevestigBoeking.Visible = false;

			// Querystring ophalen
      GetQueryStringData();
      if (!String.IsNullOrEmpty(PaginaReis.code)) {
				if (PaginaReis.datum > DateTime.Now.Date) { // Reis alleen weergeven indien deze in de toekomst is
          // Reis ophalen
					LoadReis(PaginaReis);
					// Labels weergeven
          SetInfo();
        }
				else { // Reisdatum al verstreken
          Master.FindControl("cphContent").Controls.Add(Message.ShowMessage(MessageText.Message_ReisDatumIsAlGeweest, MessageType.MessageType_Alert));
        }
      }
			else { // Ongeldige reiscode
        divReisInfo.Controls.Add(Message.ShowMessage(MessageText.Message_ReiscodeOngelidig, MessageType.MessageType_Alert));        
      }
    }

    private void GetQueryStringData() {
      string QueryReisCode = Encoder.HtmlEncode(Request.QueryString["RC"]);
      if (!String.IsNullOrEmpty(QueryReisCode)) {
        PaginaReis = new Reis(QueryReisCode); // Reis ophalen d.m.v. reiscode uit de querystring
      }
    }

    private void LoadReis(Reis aReis) {
      StringWriter stringWriter = new StringWriter();
      using (HtmlTextWriter writer = new HtmlTextWriter(stringWriter)) {
        writer.Write(Reis.BouwReisDiv(PaginaReis, false));
        divReisInfo.Controls.Add(new LiteralControl(writer.InnerWriter.ToString()));
      }
    }

    private void SetInfo() { // Labels weergeven
			lblBeschrijving.Visible = true;
      btnBevestigBoeking.Visible = true;
      
      int nieuwPuntenAantal = new PortalUser(this.Page.User.Identity.Name).inholland_miles - PaginaReis.prijs;
			lblPuntenNaAanschaf.Text = "Uw puntenaantal na aanschaf: &curren;" + nieuwPuntenAantal.ToString();
    }

    protected void btnBevestig_Click(object sender, EventArgs e) {
      string BevestigingsBericht = string.Empty;
      if (PaginaReis.datum > DateTime.Now.Date) { // Reis moet in de toekomst zijn
        if (!CheckUserMiles()) { // Alert weergeven indien gebruiker niet genoeg InhollandMiles heeft
          Master.FindControl("cphContent").Controls.Add(Message.ShowMessage(MessageText.Message_NietGenoegMiles, MessageType.MessageType_Alert));
        }
				else { // Probeer reis te boeken
          BevestigingsBericht = new PortalUser(this.Page.User.Identity.Name).BoekReis(PaginaReis.ID);
          if (BevestigingsBericht == MessageText.Message_BoekingGeslaagd) { // Reis boeken geslaagd
            // Label en button verbergen
						btnBevestigBoeking.Visible = false;
						lblPuntenNaAanschaf.Visible = false;
						// Bericht weergeven
            Master.FindControl("cphContent").Controls.Add(Message.ShowMessage(BevestigingsBericht, MessageType.MessageType_Success));
          }
					else { // Reis boeken mislukt
            Master.FindControl("cphContent").Controls.Add(Message.ShowMessage(BevestigingsBericht, MessageType.MessageType_Alert));
          }
        }
      }
			else { // Reis datum is niet in de toekomst; alert weergeven
        Master.FindControl("cphContent").Controls.Add(Message.ShowMessage(MessageText.Message_ReisDatumIsAlGeweest, MessageType.MessageType_Alert));
      }
    }

    private bool CheckUserMiles() {
      PortalUser CurrentUser = new PortalUser(this.Page.User.Identity.Name); // PortalUser ophalen zodat punten actueel zijn
      return (CurrentUser.inholland_miles > PaginaReis.prijs); // Return of gebruiker genoeg miles heeft voor de reis
    }

  }
}